home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
DS-CD ROM 2 1993 August
/
DS CD-ROM 2.Ausgabe (August 1993).iso
/
programm
/
ds0257
/
doc.exe
/
QUEUES.DOC
< prev
next >
Wrap
Text File
|
1992-02-21
|
10KB
|
264 lines
─────────────────────────────────────────────────────────────────────────────
Dokumentation zur Datei: QUEUES.INC
─────────────────────────────────────────────────────────────────────────────
QUEUES.INC - Routinen zur Verwaltung von meldungs- und stream-
orientierten Queuen über Handles
(für den Assembler A86)
(c) Bernd Schemmer 1992
Letzter Update: 02.02.1992
■ Beschreibung:
---------------
Die hier aufgeführten Routinen ermöglichen es, stream- und meldungs-
orientierte Queuen über Handles analog zu Dateien zu verwalten.
Die Routinen benötigen Routinen aus den Dateien SQUEUE.LIB, MQUEUE.LIB
und MEMORY.LIB.
■ Routinen:
-----------
OpenQueue - Öffnet eine Queue
CloseQueue - Schließt eine Queue
ReadQueue - Liest aus einer Queue
WriteQueue - Schreibt in eine Queue
LookQueue - Ermittelt die Daten der nächsten Meldung aus
der Queue (nur für meldungsorientierte Queuen)
GetQueueData - Ermittelt die globalen Daten einer Queue
GetMaxQueues - Ermittelt die max. mögliche Anzahl Queuen
und die Anzahl der schon eingerichteten Queuen
LockQueue - Sperrt eine Queue
UnlockQueue - Gibt eine Queue wieder frei
DeleteQueue - Löscht eine Queue
Hinweis: Da nicht alle verwendeten Namen und Bezeichner dieser Datei
dokumentiert sind, sollten bei Nutzung dieser Routinen in
den anderen Quelltexten keine Namen oder Bezeichner, die
die Zeichenkette 'Queue' enthalten, verwendet werden.
■ Konstanten
------------
MaxQueueHandles EQU 10xD ; max. mögliche Anzahl an Queuen, kann
; vom Programm umdefiniert werden!
; (im Intervall von 1 bis 255)
■ Fehlernummern der Routinen
----------------------------
Alle Fehlernummern der Routinen haben das Format 84xx, wobei xx die
Nummer des eigentlichen Fehlers ist. Neben diesen werden auch die
Fehlernummern der Routinen zur Verwaltung der Queuen (82xx und 83xx),
der Routinen zur Benutzung der DOS-Speicherverwaltung (81xx) und
DOS-Fehlernummern (00xx) zurückgeliefert.
Name Nummer Bedeutung
----------------------------------------------------------------------
000xxh ; DOS-Fehlernummer (normalerweise nur
; 07h, 08h und 09h)
081xxh ; Fehlernummer einer Routine zur
; Speicherverwaltung
082xxh ; Fehlernummer einer Routine zur
; Bearbeitung von meldungsorientierten
; Queuen
083xxh ; Fehlernummer einer Routine zur
; Bearbeitung von streamorientierten
; Queuen
UnknownQSubfunction EQU 8401h ; Funktion wird von der Queue nicht
; unterstützt
InvalidQueueHandle EQU 08402h ; Das angegebene Handle bezieht sich
; nicht auf eine offene Queue
NoMoreQueueHandles EQU 08403h ; kein weiteres freies Handle mehr
; vorhanden
----------------------------
GetMaxQueues
Funktion: Ermittelt die max. mögliche Anzahl Queuen und die Anzahl
der schon eingerichteten Queuen
Eingabe: -
Ausgabe: DX = max. mögliche Anzahl Queuen
CX = Anzahl schon eingerichteter Queuen
AL = Anzahl geöffneter meldungsorientierter Queuen
AH = Anzahl geöffneter streamorientierter Queuen
----------------------------
OpenQueue
Funktion: Allociert den Speicher für eine neue Queue und öffnet sie
Eingabe: CX = Größe der Queue (incl. 16 Byte für den Header)
Bit 0 von AX = 0 ->> stream-orientierte Queue
Bit 0 von AX = 1 ->> meldungs-orientierte Queue
Ausgabe: CF = 0 ->> okay
BX = Handle der Queue
CX = freier Speicher in der Queue
CF = 1 ->> Fehler
AX = Fehlernummer
BX undefiniert
Bes.: Das Directionflag wird gelöscht.
Für jede Queue wird von DOS ein neuer Speicherblock
angefordert (via Funktion 48h des Interrupt 21h)
----------------------------
CloseQueue
Funktion: Schliesst eine Queue und gibt den Speicher wieder frei
Eingabe: BX = Handle der Queue
Ausgabe: CF = 0 ->> okay
CF = 1 ->> Fehler
AX = Fehlernummer
Bes.: Die Routine überprüft NICHT, ob in der Queue noch Meldungen
sind!
----------------------------
ReadQueue
Funktion: Liest aus einer geöffneten Queue
Eingabe: BX = Handle der Queue
bei meldungsorientierten Queuen:
DS:SI -> Puffer für die Meldung
CX = Länge des Puffers
bei streamorientierten Queuen:
DS:SI -> Puffer für die zu lesenden Bytes
CX = Anzahl zu lesender Bytes
Ausgabe: CF = 0 ->> okay
bei meldungsorientierten Queuen:
Meldung steht im Puffer
CX = Länge der Meldung
bei streamorientierten Queuen:
Die Bytes stehen im Puffer
CX = Anzahl der gelesenen Bytes
CF = 1 ->> Fehler
AX = Fehlernummer
Bes.: Falls diese Routine mit CX = 0 für eine meldungsorientierte
Queue aufgerufen wird, verhält sie sich wie die Routine
'LookMQueue'.
Falls der Puffer bei DS:SI für die Meldung bei einer
meldungsorientierten Queue zu klein ist, wird die
Meldung NICHT aus der Queue entfernt.
Falls die Routine mit CX = 0 für eine streamorientierte
Queue aufgerufen wird, wird kein Byte gelesen und kein
Fehler generiert.
Das Directionflag wird gelöscht.
----------------------------
WriteQueue
Funktion: Schreibt in eine geöffnete Queue
Eingabe: BX = Handle der Queue
bei meldungsorientierten Queuen:
DS:SI -> zu schreibende Meldung
CX = Länge der zu schreibenden Meldung
bei streamorientierten Queuen:
DS:SI -> Speicherbereich mit den zu schreibenden Bytes
CX = Anzahl der zu schreibenden Bytes
Ausgabe: CF = 0 ->> okay
CF = 1 ->> Fehler
AX = Fehlernummer
bei meldungsorientierten Queuen:
Falls AX = MQueueIsFull ist:
CX = max. Länge einer weiteren Meldung für die Queue
falls CX = - 1 ->> keine weitere Meldung möglich
bei streamorientierten Queuen:
Falls AX = SQueueIsFull ist:
CX = Anzahl freier Bytes in der Queue
----------------------------
LockQueue
Funktion: Sperrt eine geöffnete Queue
Eingabe: BX = Handle der Queue
Ausgabe: CF = 0 ->> okay
CF = 1 ->> Fehler
AX = Fehlernummer
----------------------------
UnLockQueue
Funktion: Gibt eine gesperrte Queue wieder frei
Eingabe: BX = Handle der Queue
Ausgabe: CF = 0 ->> okay
CF = 1 ->> Fehler
AX = Fehlernummer
----------------------------
DeleteQueue
Funktion: Löscht den gesamten Inhalt einer geöffneten Queue
Eingabe: BX = Handle der Queue
Ausgabe: CF = 0 ->> okay
CF = 1 ->> Fehler
AX = Fehlernummer
----------------------------
GetQueueData
Funktion: Ermittelt die globalen Daten einer geöffneten Queue
Eingabe: BX = Handle der Queue
Ausgabe: CF = 0 ->> okay
DI = Segment der Queue
bei meldungsorientierten Queuen:
CX = freier Speicher in der Queue
DX = Größe der Queue
AX = Anzahl der Meldungen in der Queue
bei streamorientierten Queuen:
CX = freier Speicher in der Queue
DX = Größe der Queue
AX = belegter Speicher in der Queue
CF = 1 ->> Fehler
AX = Fehlernummer
DI undefiniert
----------------------------
LookQueue
Funktion: Ermittelt die Daten der nächsten Meldung einer geöffneten
Queue (nur bei meldungsorientierten Queuen möglich)
Eingabe: BX = Handle der Queue
Ausgabe: CF = 0 ->> okay
bei meldungsorientierten Queuen:
CX = Länge der nächsten Meldung
und falls CX <> 0:
AL = 1. Byte der Meldung
CF = 1 ->> Fehler
AX = Fehlernummer